package gest;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
import java.util.StringTokenizer;

public class CriarReceitas { 
	
	static Scanner in = new Scanner (System.in);
	static Registry reg;
	static Gestao g = null;
	static Receitas rec;
	String ficheiro;
	static DateFormat df = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
	static Calendar cal = Calendar.getInstance();
	
	public CriarReceitas(){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g= new Gestao_Impl();
	}
	//Construtor com tudo
	public CriarReceitas(int codvi, String dpres, String demi, String med, String medi, String far, String ute){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		try {
			rec = g.cria_receitas(codvi);
			rec.set_dpres(dpres);
			rec.set_demi(demi);
			rec.set_medico(med);
			rec.set_medicamento(medi);
			rec.set_farmacia(far);
			rec.set_utente(ute);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	//Construtor prescricao
	public CriarReceitas(int codvi, String dpres, String med, String medi, String far, String ute){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		try {
			rec = g.cria_receitas(codvi);
			rec.set_dpres(dpres);
			rec.set_medico(med);
			rec.set_medicamento(medi);
			rec.set_farmacia(far);
			rec.set_utente(ute);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	//Construtor emissao
	public CriarReceitas(int codvi, String demi){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		try {
			rec = g.cria_receitas(codvi);
			rec.set_demi(demi);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	public CriarReceitas(String nomeficheiro) throws IOException{
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		this.ficheiro = nomeficheiro;
		BufferedReader br = new BufferedReader (new FileReader (this.ficheiro));
		StringTokenizer st = null;
		String teste;
		while((teste = br.readLine()) != null){
			st = new StringTokenizer(teste, ";");
			int codvi= Integer.parseInt(st.nextToken());
			rec = g.cria_receitas(codvi);
			String dia = st.nextToken();
			rec.set_dpres(dia);
//			String hora = st.nextToken();
//			rec.set_dpres(dia+" "+hora);
			String dia2 = st.nextToken();
			rec.set_demi(dia2);
//			String hora2 = st.nextToken();
//			rec.set_demi(dia2+" "+hora2);
			String med = st.nextToken();
			rec.set_medico(med);
			String medi = st.nextToken();
			rec.set_medicamento(medi);
			String far = st.nextToken();
			rec.set_farmacia(far);
			String ute = st.nextToken();
			rec.set_utente(ute);		
			imprimeinfo();
		}
	}
	
	public static void main(String args[]){
		if(args[0].equals("-v")){
			if(args[1].equals("-a")){
				//Para prescrever
			new CriarReceitas(Integer.parseInt(args[2]),df.format(cal.getTime()).toString(),args[3],args[4],args[5],args[6]);
			imprimeinfo();
			System.exit(0);
			}
			else if(args[1].equals("-e")){
				//Para emitir
			new CriarReceitas(Integer.parseInt(args[2]),df.format(cal.getTime()).toString());
			imprimeinfo();
			System.exit(0);
			}else {
				new CriarReceitas(Integer.parseInt(args[1]),args[2],args[3],args[4],args[5],args[6],args[7]);
				imprimeinfo();
				System.exit(0);
			}
		}
		else if (args[0].equals("-f")){
			try {
				new CriarReceitas(args[1]);
				System.exit(0);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if(args[0].equals("-i")){
			CriarReceitas cr = new CriarReceitas();
			CriarReceitas.criar();
			CriarReceitas.resposta();
		}
		else System.out.println("Atributos Incorrectos");
	}
	
	public static void imprimeinfo(){
		try {
			System.out.println(rec.get_codvi()+" "+rec.get_dpres()+" "+rec.get_demi()+" "+rec.get_medico()+" "+rec.get_medicamento()+" "+rec.get_farmacia()+" "+rec.get_utente());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	public static void criar(){
		try {			
			System.out.println("Inserir codigo da vinheta:");
			int a = Integer.parseInt(in.nextLine());
			rec = g.cria_receitas(a);
		} catch (RemoteException e) {
			System.out.println("Falha de ligacao");
			e.printStackTrace();
		}		
	}
	
	
	public static void inserirute() {
		System.out.println("Insira o nome do utente:");
		String ute = in.nextLine();
		try {
			rec.set_utente(ute);
			System.out.println("Informacao Actualizada.");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public static void inserirfar() {
		System.out.println("Insira nome da farmacia:");
		String far = in.nextLine();
		try {
			rec.set_farmacia(far);
			System.out.println("Informacao Actualizada.");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public static void inserirmedi() {
		System.out.println("Insira o nome do medicamento:");
		String medi  = in.nextLine();
		try {
			rec.set_medicamento(medi);
			System.out.println("Informacao Actualizada.");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public static void inserirmed() {
		System.out.println("Insira nome do medico:");
		String med = in.nextLine();
		try {
			rec.set_medico(med);
			System.out.println("Informacao Actualizada.");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public static void inserirdemi() {
		System.out.println("Insira data de emissao(aaaa-mm-dd [hh:mm:ss]):");
		String demi = in.nextLine();
		try {
			rec.set_demi(demi);
			System.out.println("Informacao Actualizada.");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	public static void inserirdpres() {
		System.out.println("Insira data de prescricao(aaaa-mm-dd [hh:mm:ss]):");
		String dpres = in.nextLine();
		try {
			rec.set_dpres(dpres);
			System.out.println("Informacao Actualizada!!");
		} catch (RemoteException e) {
			e.getStackTrace();
		}
	}

	public static void info() {
		System.out.println("Deseja Alterar alguma informacao:");
		System.out.println("1 - dpres");
		System.out.println("2 - demi");
		System.out.println("3 - medico");
		System.out.println("4 - medicamento");
		System.out.println("5 - farmacia");
		System.out.println("6 - utente");
		System.out.println("7 - ver dados");
		System.out.println("8 - sair");		
	}
	
	private static void resposta(){
		info();
		int a=0;
		try{
		a = Integer.parseInt(in.nextLine());
		switch(a){
		case 1:
			inserirdpres();
			resposta();
			break;
		case 2:
			inserirdemi();
			resposta();
			break;
		case 3:
			inserirmed();
			resposta();
			break;		
		case 4:
			inserirmedi();
			resposta();
			break;	
		case 5:
			inserirfar();
			resposta();
			break;
		case 6:
			inserirute();
			resposta();
			break;
		case 7:
			imprimeinfo();
			resposta();
			break;
		case 8:
			System.exit(0);
			break;
		default:
			resposta();
			break;
		}
		}catch(java.lang.NumberFormatException e){
			System.out.println("Opcao invalida!!!!");
			resposta();
		}
	}
	
  }

